package main

import (
	"crypto/tls"
	"fmt"
	"log"
	"net/smtp"
	"strconv"
)

func main() {
	fmt.Println("测试邮箱认证信息...")
	fmt.Println("======================")

	//配置信息

	host := "smtp.exmail.qq.com" //SMTP服务器地址
	portStr := "465"
	port, err := strconv.Atoi(portStr)     //SMTP服务器端口
	username := "huxiaohui@jadeastech.com" //邮箱账号
	password := "QJVJisJDbyxYeHtf"         //邮箱密码

	fmt.Printf("配置信息:\n")
	fmt.Printf("SMTP服务器: %s\n", host)
	fmt.Printf("SMTP端口: %s\n", port)
	fmt.Printf("邮箱账号: %s\n", username)
	fmt.Printf("邮箱密码: %s\n", password)
	fmt.Println()

	//认证配置

	auth := smtp.PlainAuth("", username, password, host)

	//建立TLS连接
	fmt.Println("建立TLS连接...")
	conn, err := tls.Dial("tcp", fmt.Sprintf("%s:%d", host, port), &tls.Config{
		ServerName: host,
	})
	if err != nil {
		log.Fatal("TLS连接失败:", err)
	}

	defer conn.Close()
	fmt.Println("TLS连接成功")

	//创建SMTP客户端

	fmt.Println("创建SMTP客户端...")
	client, err := smtp.NewClient(conn, host)
	if err != nil {
		log.Fatal("创建SMTP客户端失败:", err)
	}
	defer client.Close()
	fmt.Println("SMTP客户端创建成功")

	//认证

	fmt.Println("进行SMTP认证...")
	if err := client.Auth(auth); err != nil {
		fmt.Printf("SMTP认证失败: %v\n", err)
		fmt.Printf("问题分析")
		fmt.Printf("用户名: %s\n", username)
		fmt.Printf("   - 密码长度: %d\n", len(password))
		fmt.Printf("   - 可能原因:\n")
		fmt.Printf("     1. 授权码错误或已过期\n")
		fmt.Printf("     2. 用户名格式不正确\n")
		fmt.Printf("     3. 邮箱账户被限制\n")
		fmt.Printf("     4. 需要开启SMTP服务\n")
		return
	}

	fmt.Println("SMTP认证成功")
	fmt.Println("邮箱认证信息测试通过！")
}
